The well recognized Small Computer System Interface ("SCSI") standards of the American National Standards Institute (ANSI X3.131-1986) specify the electrical, mechanical and logical characteristics of an input/output (I/O) bus interface for coupling physically small computers with other small computers and peripheral devices. Such peripheral devices may include, for example, disk drives, tape drives, printers, compact disk read-only memories, and scanners. The SCSI standards are available from the American National Standards Institute, Inc., New York, N.Y., U.S.A., and are incorporated herein by reference.
The SCSI standards generally specify an I/O bus, which commonly is referred to as a "SCSI bus." Instead of requiring a separate bus controller, a SCSI bus utilizes a SCSI bus protocol, specified by the SCSI standards, that is implemented distributively within either central processing units, host adapters of computers on the bus, and/or controllers of peripheral devices on the bus.
SCSI bus protocol provides means for the transfer of information between a pair of devices attached to the bus. This information is usually associated with the execution of device input-output commands, such as read or write. To enable the transfer of information, the bus protocol includes an addressing mechanism for identifying the devices and establishing a pathway or connection between them for the movement of command data. The addressable entities that participate in a connection are:
The initiator: The bus device originating the connection. PA0 The target: The bus device to which the connection is directed. PA0 The logical unit: An I/O device attached to the target, which services the I/O command. PA0 1. The initiator performs a SELECT-MESSAGE OUT operation referencing the main bus address of the extender as the target. PA0 2. The extender reads the logical unit number contained in the message data and stores the initiator bus ID in a table indexed by this logical unit number. PA0 3. The extender converts the logical unit number to the bus ID of the target on the auxiliary bus. PA0 4. The extender completes the connection by performing a SELECT-MESSAGE OUT operation referencing the target on the auxiliary bus. The logical unit number in the message data is set to zero. PA0 5. After the connection is established, the extender shuttles data between the main and auxiliary busses. PA0 1. The target performs a RESELECT-MESSAGE IN operation referencing the auxiliary bus ID of the extender as the initiator. PA0 2. The extender does a `reverse translation` to convert the target I/D to the logical unit number supplied by the main bus initiator in step 2 above. Using this value, the extender does a table lookup to recover the initiator main bus ID that was stored in step 2. PA0 3. The extender performs a RESELECT-MESSAGE IN operation using the bus ID of the main bus initiator. After the logical unit number is returned during the MESSAGE IN phase, the connection is complete. The extender then shuttles data between the main and auxiliary busses as described above.
A bus device is physically connected to the SCSI bus and is referenced by specifying its bus I/D as described in the SCSI standard. A SCSI bus may contain up to 16 bus devices having bus I/Ds 0 through 15. At least one bus device must be capable of performing initiator operations.
The I/O operation is executed by a logical unit attached to the target. The SCSI standard allows up to 32 logical units per target. Logical units are addressed by means of a logical unit number or LUN which is sent by special control messages during the MESSAGE IN or MESSAGE OUT phases described below. A connection is fully specified by a triplet consisting of the initiator bus ID, the target bus ID and the logical unit number of the I/O device attached to the target.
The connection between a pair of devices may have one of the following states:
ACTIVE: The connection is established over the bus such that data can be physically transferred between the source and destination. PA1 LATENT: The connection exists but the shared physical resources needed for the transfer of data are free or in use by other connections. PA1 NONEXISTENT: The connection does not exist. PA1 ARBITRATION: The process through which a bus device obtains exclusive access to the bus in order to create or reestablish a connection. PA1 SELECTION: The process through which an initiator alerts a target device that a connection is to be formed. PA1 MESSAGE OUT: The transfer of connection control information from the initiator to the target. During connection creation, the message data contains the identity of the logical unit, i.e. the logical unit number. PA1 RESELECTION: The process through which the target alerts the initiator that a connection is to be reestablished. PA1 MESSAGE IN: The transfer of connection control information from the target to the initiator. Used by the target when the connection is reactivated to send the logical unit number of the I/O device. PA1 i. Provisions for connection to a main SCSI bus. PA1 ii. An auxiliary SCSI bus, to which as many as 15 targets may be attached. PA1 ii. Logic for forming a connection between initiators attached to the main bus and targets attached to the auxiliary bus, in a manner that is transparent to the targets and initiators.
According to the SCSI standard, a bus device alters connection state through the series of bus phases set forth below.
In the SCSI standard, the bus device creating a connection is called the initiator. The bus device to which the connection is directed is called the target. As described in the SCSI standard, a connection comes into existence through the sequence of ARBITRATION, SELECTION and MESSAGE OUT phases, referred to hereinafter as the SELECT-MESSAGE OUT operation.
After arbitrating for the bus, the initiator enters the SELECTION phase and notifies the intended target by asserting its bus I/D as specified in the SCSI standard. Upon receiving the expected target response, the initiator passes control of the bus to the target. The target then solicits the logical unit number by placing the bus in the MESSAGE OUT phase and fetching the appropriate control message from the initiator. At this point, the connection enters the ACTIVE state and data specifying the command to be processed is sent to the logical unit.
While processing a command, it is usually the case that the logical unit must perform some preliminary work, such as a seek to a particular disk sector and track, before actual data transfer can take place. Since the bus is not needed during this time, the target will release control so the bus can be used to service other connections. In this case, the target relinquishes the bus and places the connection in the LATENT state using the messages and signals specified in the SCSI standard.
When the physical transfer of data is required, the target places the latent connection in the ACTIVE state through the sequence of ARBITRATION, RESELECTION and MESSAGE IN phases specified in the SCSI standard, collectively referred to hereinafter as the RESELECT-MESSAGE IN operation.
To reactivate a connection, the target arbitrates for the bus then enters the RESELECTION phase. During this phase, the target notifies the initiator that a connection is to be reestablished by asserting the initiator's bus ID. Upon receiving the expected initiator response, the target completes reactivation by entering the MESSAGE IN phase and passing the logical unit number to the initiator. At this point, the transfer of command data can be continued. Upon completion of data transfer, the target terminates the connection by placing it in the NONEXISTENT state using the signals and messages described in the SCSI standard.
The technical benefits of SCSI-based I/O systems have led developers to build systems of ever increasing complexity and storage capacity. As the demand for storage capacity increases, the limitation on the number of addressable bus devices becomes a severe constraint on the size and storage capacity that can be achieved. For that reason, the technique for extending bus connectivity described in U.S. Pat. No. 5,274,783 (House et al.) was developed. This patent, the subject matter of which is incorporated herein, in its entirely, by reference, is assigned to Digital Equipment Company. It describes a means for increasing connectivity by using a bus bridge or extender to expand the number of bus devices that can be addressed.
A bus extender environment consists of the following elements:
A main bus can have up to 15 extenders and each extender may have up to 15 targets attached. As a result, the number of bus devices that can be connected to an I/O system is increased from a maximum of 16 to a maximum of 241, 15 extenders each having 15 targets; plus one initiator on the main bus.
To the main bus initiator, the extender achieves transparency by presenting the auxiliary bus devices as if they were logical units attached to a target device e.g. the extender. Conversely, to a target device on the auxiliary bus, the extender achieves transparency by behaving as if it were the real initiator on the main bus.
When a connection is created or reactivated, the extender intervenes to form the path from the main bus initiator to the auxiliary bus target. This is done by forming two separate partial connections: one between the initiator on the main bus and the extender and the other from the extender to the target on the auxiliary bus. The partial connections are then joined together to create a single physical path. Once the path is formed, the extender simply acts as a conduit for the transfer of data.
The process of creating a connection between the main bus initiator and an auxiliary bus target is as follows:
The process of reactivating a latent connection involves reconnecting the target on the auxiliary bus to the initiator on the main bus as follows:
In a system with several main bus initiators, the method for recovering the initiator bus ID during step 2 of the reselection process effectively restricts the auxiliary bus target to no more than one connection at a time. Multiple connections, each from a different initiator cannot be accommodated since there is no way to retrieve the proper initiator bus ID by the table lookup method described.
Unfortunately this places an unacceptable restriction on the use of modern SCSI devices, which improve throughput by a technique referred to in the SCSI standard as "tagged command queuing". To use this method, the device must have one connection in existence for each pending command. Since several commands from different initiators may be in progress at any one time, the inability to support this mode of operation places unacceptable restrictions on multi-initiator systems.
Accordingly, a need exists for a method, apparatus, and computer program product that facilitates the use of the tagged command queuing method between initiators and targets whose respective busses are connected via a bus extender.